\chapter{Dise\~no}

\section{Casos de Uso}
\subsection{Caso de Uso: Registrar}

\begin{tabbing}
----- \= ------- \= \kill
{\bf Actores:} Usuario.\\
{\bf Descripci\a'on:} Cuando el usuario entra por primera vez al sistema es necesario que registre sus datos para\\ obtener una cuenta.\\
{\bf Pre-condiciones:} El usuario debe haber accesado al sistema por medio de un explorador Web.\\
{\bf Post-condiciones:} El usuario estar\a'a registrado en el sistema y podr\a'a utilizarlo.\\\\

{\bf Flujo Principal:}\\
1. El usuario inicia el sistema.\\
2. El usuario selecciona la opci\a'on de registro.\\
3. El sistema muestra un formulario para ingresar nombre de usuario, contrase\~na y confirmaci\a'on de contrase\~na.\\
4. El usuario llena el formulario con sus datos.\\
5. El sistema valida la informaci\a'on de los campos que proporcion\a'o el usuario.\\
6. El sistema informa que el usuario se ha registrado con \a'exito.\\\\

{\bf Flujo Alternativo:}\\
a. En cualquier momento - Falla el sistema.\\
\> a.1 Se cancela la operaci\a'on en el sistema. \\
\> a.2 Se reinicia el sistema.\\
5.1. El sistema no reconoce los datos del usuario.\\
\> 5.1.1. El usuario no da al sistema todos los datos requeridos para realizar la operaci\a'on de alta.\\
\> \> 5.1.1.1 El sistema informa al usuario que faltaron datos.\\
\> \> 5.1.1.2 El sistema solicita al usuario que le entregue los datos necesarios.\\
\> \> 5.1.1.3 El sistema regresa al estado 4.\\
\> 5.1.3. El usuario ya est\a'a registrado.\\
\> \> 5.1.3.1 El sistema informa al usuario que esa cuenta de usuario ya existe.\\
\> \> 5.1.3.2 El sistema solicita al usuario que ingrese otro usuario.\\
\> \> 5.1.3.3 El sistema regresa al estado 4.\\
\end{tabbing}

\begin{figure}[ht]
\begin{center}
\includegraphics[width=300pt]{./RegistrarCasoUso.png}
\caption{Caso de Uso Registrar}
\end{center}
\end{figure}

\subsection{Caso de Uso: Validar Cuenta}

\begin{tabbing}
----- \= ------- \= \kill
{\bf Actores:} Administrador, Usuario y Supervisor.\\
{\bf Descripci\a'on:} Se valida la cuenta de usuario para verificar que est\a'a registrado en\\
el sistema.\\
{\bf Pre-condiciones:} El usuario debe estar registrado en el sistema.\\
{\bf Post-condiciones:} El usuario ingreso con \a'exito al sistema y se muestran las\\ opciones de acuerdo a su tipo de usuario.\\\\

{\bf Flujo Principal:}\\
1.El usuario inicia el sistema.\\
2.El sistema pide el usuario que ingrese cuenta de usuario y contrase\~na.\\
3.El usuario escribe su usuario y contrase\~na.\\
4.El sistema valida el usuario y contrase\~na.\\\\

Flujo Alternativo:\\
a. En cualquier momento - Falla el sistema.\\
\> a.1 Se cancela la operaci\a'on en el sistema.\\
\> a.2 Se reinicia el sistema.\\
4.1. El sistema no reconoce la identidad del usuario.\\
\> 4.1.1. El sistema pregunta al usuario si desea crear una cuenta.\\
\> 4.1.2. El sistema muestra la forma de registro.\\
\> 4.1.3. El usuario crea una cuenta de usuario.\\
\> 4.1.4 El sistema regresa al estado 4.\\
\end{tabbing}

\begin{figure}[ht]
\begin{center}
\includegraphics[width=300pt]{./ValidarCuentaCasoUso.png}
\caption{Caso de Uso Validar Cuenta}
\end{center}
\end{figure}

\subsection{Caso de Uso: Editar Curr\'iculum}

\begin{tabbing}
----- \= ------- \= ------- \= \kill
{\bf Actores:} Usuario.\\
{\bf Descripci\a'on:} El usuario ingresa toda la informaci\a'on que forma parte de su curr\a'iculum.\\
{\bf Pre-condiciones:} El usuario ingres\a'o su cuenta de usuario y contrase\~na v\a'alidos.\\
{\bf Post-condiciones:} Se crean y almacenan los registro necesarios para formar parte de un curr\a'iculum con la informaci\a'on\\ que proporcion\a'o el usuario.\\\\

{\bf Flujo Principal:}\\
1.El usuario selecciona la opci\a'on de crear curr\a'iculum.\\
2.El sistema muestra un formulario para que el usuario ingrese sus datos.\\
3. El administrador despliega una de las secciones para editar (informaci\a'on personal, aficion, curso, direcci\a'on, documentaci\a'on, correo electr\a'onico, escolaridad, habilidad, idioma, publicaci\a'on, tel\a'efono y trabajo).\\
\> 3.1. El usuario elige editar su informaci\a'on personal.\\
\> \> 3.1.1. El usuario realiza cambios en el formulario con la informaci\a'on que desea cambiar.\\
\> \> 3.1.2. El sistema valida la informaci\a'on de los campos que proporcion\a'o el usuario.\\
\> \> 3.1.3. El sistema actualiza la informaci\a'on personal.\\
\> \> 3.1.4. El sistema confirma al usuario que se ha actualizado la informaci\a'on personal.\\
\> 3.2. El usuario elige agregar una direcci\a'on.\\
\> \> 3.2.1. El usuario llena el formulario con la informaci\a'on de direccion.\\
\> \> 3.2.2. El sistema valida la informaci\a'on de los campos que proporcion\a'o el usuario.\\
\> \> 3.2.3. El sistema da de alta la direcci\a'on.\\
\> \> 3.2.4. El sistema confirma al usuario que se ha dado de alta la direcci\a'on.\\
\> 3.3. El usuario elige agregar un tel\a'efono.\\
\> \> 3.3.1. El usuario llena el formulario con la informaci\a'on de tel\a'efono.\\
\> \> 3.3.2. El sistema valida la informaci\a'on de los campos que proporcion\a'o el usuario.\\
\> \> 3.3.3. El sistema da de alta el tel\a'efono.\\
\> \> 3.3.4. El sistema confirma al usuario que se ha dado de alta el tel\a'efono.\\
\> 3.4. El usuario elige agregar un correo electr\a'onico.\\
\> \> 3.4.1. El usuario llena el formulario con la informaci\a'on de correo electr\a'onico.\\
\> \> 3.4.2. El sistema valida la informaci\a'on de los campos que proporcion\a'o el usuario.\\
\> \> 3.4.3. El sistema da de alta el correo electr\a'onico.\\
\> \> 3.4.4. El sistema confirma al usuario que se ha dado de alta el correo electr\a'onico.\\
\> 3.5. El usuario elige agregar una afici\a'on.\\
\> \> 3.5.1. El usuario llena el formulario con la informaci\a'on de aficiones.\\
\> \> 3.5.2. El sistema valida la informaci\a'on de los campos que proporcion\a'o el usuario.\\
\> \> 3.5.3. El sistema da de alta la afici\a'on.\\
\> \> 3.5.4. El sistema confirma al usuario que se ha dado de alta la afici\a'on.\\
\> 3.6. El usuario elige agregar un curso.\\
\> \> 3.6.1. El usuario llena el formulario con la informaci\a'on de curso.\\
\> \> 3.6.2. El sistema valida la informaci\a'on de los campos que proporcion\a'o el usuario.\\
\> \> 3.6.3. El sistema da de alta el curso.\\
\> \> 3.6.4. El sistema confirma al usuario que se ha dado de alta el curso.\\
\> 3.7. El usuario elige agregar documentaci\a'on.\\
\> \> 3.7.1. El usuario llena el formulario con la informaci\a'on de documentaci\a'on.\\
\> \> 3.7.2. El sistema valida la informaci\a'on de los campos que proporcion\a'o el usuario.\\
\> \> 3.7.3. El sistema da de alta la documentaci\a'on.\\
\> \> 3.7.4. El sistema confirma al usuario que se ha dado de alta la documentaci\a'on.\\
\> 3.8. El usuario elige agregar escolaridad.\\
\> \> 3.8.1. El usuario llena el formulario con la informaci\a'on de escolaridad.\\
\> \> 3.8.2. El sistema valida la informaci\a'on de los campos que proporcion\a'o el usuario.\\
\> \> 3.8.3. El sistema da de alta la instituci\a'on.\\
\> \> 3.8.4. El sistema confirma al usuario que se ha dado de alta la instituci\a'on.\\
\> 3.9. El usuario elige agregar una habilidad.\\
\> \> 3.9.1. El usuario llena el formulario con la informaci\a'on de habilidad.\\
\> \> 3.9.2. El sistema valida la informaci\a'on de los campos que proporcion\a'o el usuario.\\
\> \> 3.9.3. El sistema da de alta la habilidad.\\
\> \> 3.9.4. El sistema confirma al usuario que se ha dado de alta la habilidad.\\
\> 3.10. El usuario elige agregar un idioma.\\
\> \> 3.10.1. El usuario llena el formulario con la informaci\a'on de idioma.\\
\> \> 3.10.2. El sistema valida la informaci\a'on de los campos que proporcion\a'o el usuario.\\
\> \> 3.10.3. El sistema da de alta el idioma.\\
\> \> 3.10.4. El sistema confirma al usuario que se ha dado de alta el idioma.\\
\> 3.11. El usuario elige agregar una publicaci\a'on.\\
\> \> 3.11.1. El usuario llena el formulario con la informaci\a'on de publicaci\a'on.\\
\> \> 3.11.2. El sistema valida la informaci\a'on de los campos que proporcion\a'o el usuario.\\
\> \> 3.11.3. El sistema da de alta la publicaci\a'on.\\
\> \> 3.11.4. El sistema confirma al usuario que se ha dado de alta la publicaci\a'on.\\
\> 3.12. El usuario elige agregar un trabajo.\\
\> \> 3.12.1. El usuario llena el formulario con la informaci\a'on de trabajo.\\
\> \> 3.12.2. El sistema valida la informaci\a'on de los campos que proporcion\a'o el usuario.\\
\> \> 3.12.3. El sistema da de alta el trabajo.\\
\> \> 3.12.4. El sistema confirma al usuario que se ha dado de alta el trabajo.\\\\

{\bf Flujo Alternativo:}\\
a. En todo momento - El sistema falla\\
\> a.1. Se cancela la operaci\a'on que se estaba realizando.\\
2.a. El usuario no desea editar su curr\a'iculum.\\
\> 2.a.1. El usuario informa al sistema que ya no desea editar su curr\a'iculum.\\
\> 2.a.2. El sistema cancela la operaci\a'on y regresa a su estado inicial.\\
3.1.a El administrador no desea editar su curr\a'iculum.\\
\> 3.1.a.1 El administrador informa al sistema que ya no desea editar su curr\a'iculum.\\
\> 3.1.a.2. El sistema vuelve al estado 2.\\
\end{tabbing}

\begin{figure}[ht]
\begin{center}
\includegraphics[width=300pt]{./EditarCurriculumCasoUso.png}
\caption{Caso de Uso Editar Curr\'iculum}
\end{center}
\end{figure}

\subsection{Caso de uso: Personalizar Curr\a'iculum}

\begin{tabbing}
----- \= ------- \= -------  \= ------- \= \kill
{\bf Actores:} Usuario.\\
{\bf Descripci\a'on:} El usuario edita el \a'orden y los registros que aparecer\a'an al generar un curr\a'iculum.\\
{\bf Pre-condiciones:} El usuario ingres\a'o su cuenta de usuario y contrase\~na v\a'alidos.\\
{\bf Post-condiciones:} El sistema guarda el \a'orden y los registros que aparecer\a'an al momento de generar el curr\a'iculum del usuario.\\\\

{\bf Flujo Principal:}\\
1.El usuario selecciona la opci\a'on de personalizar curr\a'iculum.\\
2.El sistema muestra una pantalla con las diferentes secciones de las que esta compuesto el curr\a'iculum.\\
3.El usuario arrastra y suelta los registros en la posici\a'on deseada.\\
4. El sistema confirma al usuario que se han guardado los cambios.\\
5.El usuario activa la bandera de los registros que desea que aparezcan en su curr\a'iculum.\\
6. El sistema confirma al usuario que se han guardado los cambios.\\\\

{\bf Flujo Alternativo:}\\
a. En cualquier momento - Falla el sistema.\\
\> a.1. Se cancela la operaci\a'on en el sistema.\\
\> a.2. Se reinicia el sistema.\\
\end{tabbing}

\begin{figure}[ht]
\begin{center}
\includegraphics[width=300pt]{./PersonalizarCurriculumCasoUso.png}
\caption{Caso de Uso Personalizar Curr\a'iculum}
\end{center}
\end{figure}

\subsection{Caso de Uso: Generar Curr\a'iculum}

\begin{tabbing}
----- \= ------- \= ------- \= \kill
{\bf Actores:} Administrador, Supervisor y Usuario.\\
{\bf Descripci\a'on:} El usuario puede generar su curr\a'iculum en formato PDF.\\
{\bf Pre-condiciones:} El usuario ingres\a'o su cuenta de usuario y contrase\~na v\a'alidos. El usuario debe de tener por lo menos un\\ registro en alguna secci\a'on del curr\a'iculum.\\
{\bf Post-condiciones:} El sistema genera y muestra el curr\a'iculum en formato PDF.\\\\

{\bf Flujo Principal:}\\
1.El usuario selecciona la opci\a'on de generar curr\a'iculum.\\
2.El sistema muestra la curr\a'icula del usuario creados hasta el momento.\\
3.El sistema pregunta al usuario el nombre y destino del archivo a generar.\\
4.El usuario escribe un nombre y selecciona el destino del archivo que contendr\a'a la informaci\a'on\\ del curr\a'iculum.
5.El sistema informa al usuario que se ha generado el archivo y lo muestra.\\\\

{\bf Flujo Alternativo:}
a. En cualquier momento - Falla el sistema.\\
\> a.1. Se cancela la operaci\a'on en el sistema.\\
\> a.2. Se reinicia el sistema.\\
b. En cualquier momento el usuario desea seleccionar otro curr\a'iculum.\\
\> b.1. El usuario cancela la operaci\a'on que realiza en el momento.\\
\> b.2. El sistema regresa al estado 2.\\
\end{tabbing}

\begin{figure}[ht]
\begin{center}
\includegraphics[width=300pt]{./GenerarCurriculumCasoUso.png}
\caption{Caso de Uso Generar Curr\'iculum}
\end{center}
\end{figure}

\subsection{Caso de uso: Seleccionar Plantilla}

\begin{tabbing}
----- \= ------- \= -------  \= ------- \= \kill
{\bf Actores:} Usuario.\\
{\bf Descripci\a'on:} El usuario selecciona una plantilla disponible que pueda ser aplicada al generar un curr\a'iculum.\\
{\bf Pre-condiciones:} El usuario ingres\a'o su cuenta de usuario y contrase\~na v\a'alidos.\\
{\bf Post-condiciones:} El sistema guarda la plantilla que aplicar\a'a al momento de generar el curr\a'iculum del usuario.\\\\

{\bf Flujo Principal:}\\
1.El usuario selecciona la opci\a'on de seleccionar plantilla.\\
2.El sistema muestra una lista de plantillas.\\
3.El usuario selecciona cada una de las plantillas para observar la vista previa.\\
4.El sistema muestra la vista previa de cada una de las plantillas.\\
5.El usuario pide al sistema guardar la \a'ultima plantilla seleccionada.\\
6.El sistema guarda el tipo de plantilla que se aplicar\a'a.\\\\

{\bf Flujo Alternativo:}\\
a. En cualquier momento - Falla el sistema.\\
\> a.1. Se cancela la operaci\a'on en el sistema.\\
\> a.2. Se reinicia el sistema.\\
3.1 El usuario no guarda al seleccionar la plantilla.\\
\> 3.1.1 El sistema aplicar\a'a la \a'ultima plantilla guardada en el sistema.\\
\> \> 7.1.1.1 El  usuario decide sobrescribir la plantilla existente.\\
\> \> 7.1.1.2 El sistema regresa al estado 8.\\
\> 7.1.2. El sistema pide al usuario que ingrese otro nombre para la plantilla a crear.\\
\> 7.1.3.  El sistema regresa al estado 3.\\
\end{tabbing}

\begin{figure}[ht]
\begin{center}
\includegraphics[width=300pt]{./SeleccionarPlantillaCasoUso.png}
\caption{Caso de Uso Seleccionar Plantilla}
\end{center}
\end{figure}

\subsection{Caso de Uso: Generar Reportes}

\begin{tabbing}
----- \= ------- \= -------  \= ------- \= \kill
{\bf Actores}: Administrador y Supevisor.\\
{\bf Descripci\a'on:} El usuario podr\a'a consultar cualquier curr\a'iculum seleccionando la\\ informaci\a'on que debe ser mostrada.\\
{\bf Pre-condiciones:} El usuario ingres\a'o su cuenta de usuario y contrase\~na v\a'alidos.\\
{\bf Post-condiciones:} El sistema mostrar\a'a un reporte con la curr\a'icula y la informaci\a'on que\\ coincida con los datos que busca el administrador.\\\\

{\bf Flujo Principal:}
1.El usuario selecciona la opci\a'on de generar reportes.\\
2.El sistema presenta un formulario al usuario para que ingrese los datos a consultar.\\
3.El usuario escribe los criterios de b\a'usqueda para cada campo.\\
4.El sistema valida la informaci\a'on de los campos que proporcion\a'o el usuario.\\
5.El sistema busca la curr\a'icula que coincide con los criterios.\\
6.El sistema muestra un reporte con la curr\a'icula que encontr\a'o.\\\\

{\bf Flujo Alternativo:}\\
a. En cualquier momento - Falla el sistema.\\
a.1. Se cancela la operaci\a'on en el sistema.\\
\> a.2. Se reinicia el sistema.\\
4.1 El usuario no ingreso ning\a'un dato en el formulario.\\
\> 4.1.1 El sistema indica al usuario que se generar\a'a un curr\a'iculum en blanco.\\
\> \> 4.1.1.1 El usuario decide agregar informaci\a'on al formulario.\\
\> \> \> 4.1.1.1.2 El sistema regresa al estado 4.\\
\> 4.1.2 El sistema regresa al estado 5.\\
4.2. El usuario ingresa una cadena inv\a'alida.\\
\> 4.2.1 El sistema indica el error de datos inv\a'alidos.\\
\> 4.2.2 El sistema regresa al estado 4.\\
5.1. El sistema no encuentra informaci\a'on que coincida con el criterio de b\a'usqueda.\\
\> 5.1.1. El sistema indica que no hay informaci\a'on que coincida con el criterio de b\a'usqueda.\\
\> 5.1.2. El sistema regresa al estado 1.\\
\end{tabbing}

\begin{figure}[ht]
\begin{center}
\includegraphics[width=300pt]{./GenerarReportesCasoUso.png}
\caption{Caso de Uso Generar Reportes}
\end{center}
\end{figure}

\subsection{Caso de Uso: Administrar Usuarios}

\begin{tabbing}
----- \= ------- \= -------  \= ------- \= \kill
{\bf Actores:} Administrador.\\
{\bf Descripci\a'on:} El administrador puede crear, modificar, consultar o eliminar cualquier usuario que est\a'e registrado\\ en el sistema.\\
{\bf Pre-condiciones:} El administrador ingres\a'o su cuenta de usuario y contrase\~na v\a'alidos.\\
{\bf Post-condiciones:} El sistema crea, modifica, consulta o elimina una cuenta de usuario.\\\\

{\bf Flujo Principal:}\\
1. El administrador selecciona la opci\a'on de administrar usuarios.\\
2. El sistema pregunta al administrador qu\a'e actividad desea realizar (altas, bajas, cambios o consultas).\\
3. El administrador elige una de las opciones (altas, bajas, cambios o consultas).\\
\> 3.1. El administrador elige realizar altas.\\
\> \> 3.1.1. El administrador indica al sistema el nombre de usuario, contrase\~na y tipo de usuario.\\
\> \> 3.1.2. El sistema valida la informaci\a'on de los campos que proporcion\a'o el usuario.\\
\> \> 3.1.3. El sistema da de alta al usuario.\\
\> \> 3.1.4. El sistema confirma al administrador que se ha dado de alta al usuario.\\
\> 3.2. El administrador elige realizar bajas.\\
\> \> 3.2.1 El administrador indica al sistema el usuario que desea dar de baja.\\
\> \> 3.2.2 El administrador confirma al sistema que desea dar de baja al usuario escogido.\\
\> \> 3.2.3 El sistema da de baja al usuario.\\
\> \> 3.2.4 El sistema confirma que se ha dado de baja el usuario correctamente.\\
\> 3.3. El administrador elige realizar cambios.\\
\> \> 3.3.1 El administrador indica al sistema el usuario que desea modificar.\\
\> \> 3.3.2 El sistema muestra el usuario que se modificará.\\
\> \> 3.3.3 El administrador indica al sistema las modificaciones que se deben hacer al usuario escogido.\\
\> \> 3.3.4 El sistema realiza las modificaciones al usuario.\\
\> \> 3.3.5 El sistema confirma al administrador que se han realizado las modificaciones correctamente.\\
\> 3.4. El administrador elige realizar consultas.\\
\> \> 3.4.1 El administrador indica al sistema la informaci\a'on que desea buscar.\\
\> \> 3.4.2 El sistema muestra los datos del usuario o usuarios que se eligi\a'o consultar.\\\\

{\bf Flujo Alternativo:}\\
a. En todo momento - El sistema falla\\
\> a.1. Se cancela la operaci\a'on que se estaba realizando.\\
2.a. El administrador no desea administrar usuarios.\\
\> 2.a.1. El administrador informa al sistema que ya no desea gestionar usuarios.\\
\> 2.a.2. El sistema cancela la operaci\a'on y regresa a su estado inicial.\\
3.1.a El administrador no desea realizar altas.\\
\> 3.1.a.1 El administrador informa al sistema que ya no desea realizar altas.\\
\> 3.1.a.2. El sistema vuelve al estado 2.\\
\> \> 3.1.1.a. La cuenta de usuario ingresada al sistema ya existe.\\
\> \> \> 3.1.1.a.1. El sistema informa al administrador que esa cuenta de usuario ya existe.\\
\> \> \> 3.1.1.a.2. El sistema espera a que el administrador ingrese otro usuario.\\
\> \> \> 3.1.1.a.3. El sistema regresa al estado 3.1.2.\\
3.1.2.a. El administrador no da al sistema todos los datos requeridos para realizar la operaci\a'on de alta.\\
\> 3.1.2.a.1. El sistema informa al administrador que faltaron datos.\\
\> 3.1.2.a.2. El sistema solicita al administrador que le entregue los datos necesarios.\\
\> 3.1.2.a.3. El sistema regresa al estado 3.1.2.\\
3.1.4.a - La operaci\a'on de alta no se realiza correctamente\\
\> 3.1.4.a.1. El sistema informa al administrador que ha ocurrido un error.\\
\> 3.1.4.a.2. El sistema pregunta al administrador si desea que se reintente la operaci\a'on o si desea que se cancele.\\
\> 3.1.4.a.3. El administrador elige una opci\a'on (reintentar o cancelar la operaci\a'on de alta).\\
\> \> 3.1.4.a.3.1. El administrador elige reintentar la operaci\a'on de alta.\\
\> \> \> 3.1.4.a.3.1.1. El sistema vuelve al estado 3.1.4.\\
\> \> 3.1.4.a.3.2. El administrador elige cancelar la operaci\a'on de alta.\\
\> \> \> 3.1.4.a.3.2.1. El sistema cancela la operaci\a'on de alta.\\
\> \> \> 3.1.4.a.3.2.2. El sistema vuelve al estado 3.1.\\
3.2.4.a - La operaci\a'on de baja no se realiza correctamente\\
\> 3.2.4.a.1. El sistema informa al administrador que ha ocurrido un error.\\
\> 3.2.4.a.2. El sistema pregunta al administrador si desea que se reintente la operaci\a'on o si desea que se cancele.\\
\> 3.2.4.a.3. El administrador elige una opci\a'on (reintentar o cancelar la operaci\a'on de
baja).\\
\> \> 3.2.4.a.3.1. El administrador elige reintentar la operaci\a'on de baja.\\
\> \> \> 3.2.4.a.3.1.1. El sistema vuelve al estado 3.2.4.\\
\> \> 3.2.4.a.3.2 - El administrador elige cancelar la operaci\a'on de baja.\\
\> \> \> 3.2.4.a.3.2.1. El sistema cancela la operaci\a'on de baja.\\
\> \> \> 3.2.4.a.3.2.2. El sistema vuelve al estado 3.2\\
3.3.4.a - La operaci\a'on de modificaci\a'on no se realiza correctamente\\
\> 3.3.4.a.1 El sistema informa al administrador que ha ocurrido un error.\\
\> 3.3.4.a.2 El sistema pregunta al administrador si desea que se reintente la operaci\a'on
o si desea que se cancele.\\
\> 3.3.4.a.3 El administrador elige una opci\a'on (reintentar o cancelar la operaci\a'on de
modificaci\a'on)\\
\> \> 3.3.4.a.3.1 El administrador elige reintentar la operaci\a'on de modificaci\a'on.\\
\> \> \> 3.3.4.a.3.1.1 El sistema vuelve al estado 3.3.4.\\
\> \> 3.3.4.a.3.2 - El administrador elige cancelar la operaci\a'on de modificaci\a'on.\\
\> \> \> 3.3.4.a.3.2.1 El sistema cancela la operaci\a'on de modificaci\a'on.\\
\> \> \> 3.3.4.a.3.2.2 El sistema vuelve al estado 3.3.\\
3.4.1.a No se encuentra el dato buscado en la ubicaci\a'on (opci\a'on) elegida.\\
\> 3.4.1.a.1 El sistema informa al administrador que no hubo resultados.\\
\> 3.4.1.a.2 El sistema espera a que el administrador ingrese otros dato y opci\a'on.\\
\> 3.4.1.a.3 El sistema regresa al estado 3.4.1.\\
\end{tabbing}

\begin{figure}[ht]
\begin{center}
\includegraphics[width=300pt]{./AdministrarUsuariosCasoUso.png}
\caption{Caso de Uso Administrar Usuarios}
\end{center}
\end{figure}

\section{Diagramas de Clases}

\subsection{Usuarios, Men\a'u y Contacto}

\begin{figure}[ht]
\begin{center}
\includegraphics[width=600pt]{./ContactoDiagramaClases.png}
\caption{Diagrama de Clases Usuarios y Men\a'u}
\end{center}
\end{figure}

\begin{figure}[ht]
\begin{center}
\includegraphics[width=200pt]{./UsuariosDiagramaClases.png}
\caption{Diagrama de Clases Usuarios y Men\a'u}
\end{center}
\end{figure}

\subsection{Curr\a'iculum}

\begin{figure}[ht]
\begin{center}
\includegraphics[width=500pt]{./CurriculumDiagramaClases.png}
\caption{Diagrama de Clases Curr\a'iculum}
\end{center}
\end{figure}

\subsection{Personal}

\begin{figure}[ht]
\begin{center}
\includegraphics[width=500pt]{./PersonalDiagramaClases.png}
\caption{Diagrama de Clases Personal}
\end{center}
\end{figure}

\subsection{Direcci\a'on}

\begin{figure}[ht]
\begin{center}
\includegraphics[width=500pt]{./DireccionDiagramaClases.png}
\caption{Diagrama de Clases Direcci\a'on}
\end{center}
\end{figure}

\subsection{Tel\a'efono}

\begin{figure}[ht]
\begin{center}
\includegraphics[width=500pt]{./TelefonoDiagramaClases.png}
\caption{Diagrama de Clases Tel\a'efono}
\end{center}
\end{figure}

\subsection{Correo electr\a'onico}

\begin{figure}[ht]
\begin{center}
\includegraphics[width=500pt]{./EmailDiagramaClases.png}
\caption{Diagrama de Clases Correo electr\a'onico}
\end{center}
\end{figure}

\subsection{Escolaridad}

\begin{figure}[ht]
\begin{center}
\includegraphics[width=500pt]{./EscolarDiagramaClases.png}
\caption{Diagrama de Clases Escolaridad}
\end{center}
\end{figure}

\subsection{Experiencia Laboral}

\begin{figure}[ht]
\begin{center}
\includegraphics[width=500pt]{./TrabajoDiagramaClases.png}
\caption{Diagrama de Clases Experiencia Laboral}
\end{center}
\end{figure}

\subsection{Afici\a'on}

\begin{figure}[ht]
\begin{center}
\includegraphics[width=500pt]{./AficionDiagramaClases.png}
\caption{Diagrama de Clases Afici\a'on}
\end{center}
\end{figure}

\subsection{Curso}

\begin{figure}[ht]
\begin{center}
\includegraphics[width=500pt]{./CursoDiagramaClases.png}
\caption{Diagrama de Clases Curso}
\end{center}
\end{figure}

\subsection{Documentaci\a'on}

\begin{figure}[ht]
\begin{center}
\includegraphics[width=500pt]{./DocumentacionDiagramaClases.png}
\caption{Diagrama de Clases Documentaci\a'on}
\end{center}
\end{figure}

\subsection{Habilidad}

\begin{figure}[ht]
\begin{center}
\includegraphics[width=500pt]{./HabilidadDiagramaClases.png}
\caption{Diagrama de Clases Habilidad}
\end{center}
\end{figure}

\subsection{Idioma}

\begin{figure}[ht]
\begin{center}
\includegraphics[width=500pt]{./IdiomaDiagramaClases.png}
\caption{Diagrama de Clases Idioma}
\end{center}
\end{figure}

\subsection{Publicaci\a'on}

\begin{figure}[ht]
\begin{center}
\includegraphics[width=500pt]{./PublicacionDiagramaClases.png}
\caption{Diagrama de Clases Publicaci\a'on}
\end{center}
\end{figure}

\chapter{Navegaci\a'on y Base de Datos}

\subsection{Diagrama de Navegaci\a'on}

\begin{figure}[ht]
\begin{center}
\includegraphics[width=350pt]{./MapaSitio.png}
\caption{Mapa del Sitio}
\end{center}
\end{figure}

'\\\\

\subsection{Diagrama Entidad Relaci\a'on de Base de Datos}

\begin{figure}[ht]
\begin{center}
\includegraphics[width=350pt]{./DERBD.png}
\caption{Diagrama Entidad Relaci\a'on}
\end{center}
\end{figure}

\subsection{Esquema F\'isico de Base de Datos}

\begin{table}[!htp]
DROP DATABASE curricula;\\\\

CREATE DATABASE curricula;\\\\

USE curricula;\\\\


CREATE TABLE usuario\\
(\\
  usr\_id serial,\\
  usr\_nick varchar(30),\\
  usr\_password varchar(30),\\
  usr\_tipo varchar(30),\\
  usr\_plantilla int,\\
  PRIMARY KEY (usr\_id)\\
);\\\\

CREATE TABLE personal\\
(\\
  per\_id bigint(20) unsigned,\\
  per\_nombre varchar(50),\\
  per\_paterno varchar(50),\\
  per\_materno varchar(50),\\
  per\_edad int(3),\\
  per\_fnacimiento date,\\
  per\_sexo varchar(10),\\
  per\_edocivil varchar(10),\\
  FOREIGN KEY (per\_id) REFERENCES usuario (usr\_id),\\
  PRIMARY KEY (per\_id)\\
);\\\\

CREATE TABLE aficion\\
(\\
  usr\_id bigint(20) unsigned,\\
  afi\_id serial,\\
  afi\_aficion varchar(80),\\
  afi\_tpractica varchar(50),\\
  afi\_tipo varchar(80),\\
  afi\_comentarios varchar(300),\\
  afi\_orden bigint(20) unsigned,\\
  afi\_visible bool,\\
  PRIMARY KEY (usr\_id, afi\_id),\\
  FOREIGN KEY (usr\_id) REFERENCES usuario (usr\_id)\\
);\\\\
\end{table}

\begin{table}
CREATE TABLE curso\\
(\\
  usr\_id bigint(20) unsigned,\\
  cur\_id serial,\\
  cur\_tema varchar(80),\\
  cur\_institucion varchar(80),\\
  cur\_tipo varchar(80),\\
  cur\_descripcion varchar(300),\\
  cur\_finicio date ,\\
  cur\_ffinal date,\\
  cur\_comentarios varchar(300),\\
  cur\_orden bigint(20) unsigned,\\
  cur\_visible bool,\\
  PRIMARY KEY (usr\_id, cur\_id),\\
  FOREIGN KEY (usr\_id) REFERENCES usuario (usr\_id)\\
);\\\\

CREATE TABLE direccion\\
(\\
  usr\_id bigint(20) unsigned ,\\
  dir\_id serial,\\
  dir\_calle varchar(80) ,\\
  dir\_numero varchar(80),\\
  dir\_interior varchar(80)  default NULL,\\
  dir\_colonia varchar(80),\\
  dir\_cp int(50) ,\\
  dir\_ciudad varchar(80) ,\\
  dir\_pais varchar(80),\\
  dir\_orden bigint(20) unsigned,\\
  dir\_visible bool,\\
  PRIMARY KEY (usr\_id, dir\_id),\\
  FOREIGN KEY (usr\_id) REFERENCES usuario (usr\_id)\\
);\\\\

CREATE TABLE documentacion\\
(\\
  usr\_id bigint(20) unsigned ,\\
  doc\_id serial,\\
  doc\_documento varchar(80),\\
  doc\_tipo varchar(80),\\
  doc\_clase varchar(80),\\
  doc\_clave varchar(80),\\
  doc\_vigencia varchar(80),\\
  doc\_orden bigint(20) unsigned,\\
  doc\_visible bool,\\
  PRIMARY KEY  (usr\_id, doc\_id),\\
  FOREIGN KEY (usr\_id) REFERENCES usuario (usr\_id)\\
);\\\\
\end{table}

\begin{table}
CREATE TABLE email\\
(\\
  usr\_id bigint(20) unsigned,\\
  ema\_id serial,\\
  ema\_correo varchar(40),\\
  ema\_descripcion varchar(300),\\
  ema\_tipo varchar(80),\\
  ema\_orden bigint(20) unsigned,\\
  ema\_visible bool,\\
  PRIMARY KEY (usr\_id, ema\_id),\\
  FOREIGN KEY (usr\_id) REFERENCES usuario (usr\_id)\\
);\\\\

CREATE TABLE escolaridad\\
(\\
  usr\_id bigint(20) unsigned,\\
  esc\_id serial,\\
  esc\_institucion varchar(80),\\
  esc\_clave varchar(50),\\
  esc\_nivel varchar(50) ,\\
  esc\_especialidad varchar(50),\\
  esc\_titulo varchar(50),\\
  esc\_finicio date,\\
  esc\_ffinal date,\\
  esc\_telefono varchar(25),\\
  esc\_direccion varchar(300),\\
  esc\_comentarios varchar(300),\\
  esc\_orden bigint(20) unsigned,\\
  esc\_visible bool,\\
  PRIMARY KEY (usr\_id,esc\_id),\\
  FOREIGN KEY (usr\_id) REFERENCES usuario (usr\_id)\\
);\\\\

CREATE TABLE habilidad\\
(\\
  usr\_id bigint(20) unsigned ,\\
  hab\_id serial,\\
  hab\_habilidad varchar(80) ,\\
  hab\_tipo varchar(50) ,\\
  hab\_descripcion varchar(300) ,\\
  hab\_texperiencia varchar(80) ,\\
  hab\_orden bigint(20) unsigned,\\
  hab\_visible bool,\\
  PRIMARY KEY  (usr\_id,hab\_id),\\
  FOREIGN KEY (usr\_id) REFERENCES usuario (usr\_id)\\
);\\\\
\end{table}

\begin{table}
CREATE TABLE idioma\\
(\\
  usr\_id bigint(20) unsigned ,\\
  idi\_id serial,\\
  idi\_institucion varchar(80),\\
  idi\_nhablado int(20) ,\\
  idi\_nescrito int(20),\\
  idi\_titulo varchar(80) ,\\
  idi\_comentarios varchar(300),\\
  idi\_orden bigint(20) unsigned,\\
  idi\_visible bool,\\
  PRIMARY KEY (usr\_id,idi\_id),\\
  FOREIGN KEY (usr\_id) REFERENCES usuario (usr\_id)\\
);\\\\

CREATE TABLE telefono\\
(\\
  usr\_id bigint(20) unsigned ,\\
  tel\_id serial,\\
  tel\_numero varchar(50) ,\\
  tel\_tipo varchar(50) ,\\
  tel\_descripcion varchar(300)  default NULL,\\
  tel\_orden bigint(20) unsigned,\\
  tel\_visible bool,\\
  PRIMARY KEY (usr\_id,tel\_id),\\
  FOREIGN KEY (usr\_id) REFERENCES usuario (usr\_id)\\
);\\\\

CREATE TABLE trabajo\\
(\\
  usr\_id bigint(20) unsigned ,\\
  tra\_id serial,\\
  tra\_empresa varchar(80) ,\\
  tra\_puesto varchar(80) ,\\
  tra\_descripcion varchar(300) ,\\
  tra\_direccion varchar(300) ,\\
  tra\_telefono varchar(50) ,\\
  tra\_email varchar(50) ,  \\
  tra\_jefe varchar(50) ,\\
  tra\_finicio date,\\
  tra\_ffinal date ,\\
  tra\_comentario varchar(300) ,\\
  tra\_orden bigint(20) unsigned,\\
  tra\_visible bool,\\
  PRIMARY KEY (tra\_id),\\
  FOREIGN KEY (usr\_id) REFERENCES usuario (usr\_id)\\
);\\\\
\end{table}

\begin{table}
CREATE TABLE publicacion\\
(\\
  usr\_id bigint(20) unsigned ,\\
  pub\_id serial,\\
  pub\_titulo varchar(80) ,\\
  pub\_lugar varchar(80) ,\\
  pub\_descripcion varchar(300) ,\\
  pub\_fecha date,  \\
  pub\_comentario varchar(300) ,\\
  pub\_orden bigint(20) unsigned, \\
  pub\_visible bool,\\
  PRIMARY KEY (pub\_id),\\
  FOREIGN KEY (usr\_id) REFERENCES usuario (usr\_id)\\
);\\\\

CREATE TABLE menu\\
(\\
  men\_id int unsigned,\\
  men\_menu varchar(50),\\
  men\_ruta varchar(50),\\
  men\_tipo varchar(13),\\
  men\_seccion varchar(13)\\
);\\\\

INSERT INTO usuario VALUES (1,'admin','pass','administrador','1');\\
INSERT INTO usuario VALUES (2,'super','pass','supervisor','1');\\
INSERT INTO usuario VALUES (3,'user','pass','usuario','1');\\\\

INSERT INTO menu VALUES ('1','Inicio','/inicio.do','administrador','menu');\\
INSERT INTO menu VALUES ('2','Curriculum','/curriculum.do','administrador','menu');\\
INSERT INTO menu VALUES ('3','Usuarios','/usuarios.do','administrador','menu');\\
INSERT INTO menu VALUES ('4','Busquedas','/busquedas.do','administrador','menu');\\
INSERT INTO menu VALUES ('5','Mi Cuenta','/autoModificarU.do','administrador','menu');\\
INSERT INTO menu VALUES ('6','Acerca','/acerca.do','administrador','menu');\\
INSERT INTO menu VALUES ('7','Contacto','/contacto.do','administrador','menu');\\\\

INSERT INTO menu VALUES ('1','Inicio','/inicio.do','administrador','menuC');\\
INSERT INTO menu VALUES ('2','Formulario','/formulario.do','administrador','menuC');\\
INSERT INTO menu VALUES ('3','Personalizar','/curriculumA.do?accion=populateTablas','administrador','menuC');\\
INSERT INTO menu VALUES ('4','Plantillas','/plantillas.do','administrador','menuC');\\
INSERT INTO menu VALUES ('5','Generar','/curriculumA.do?accion=genera','administrador','menuC');\\\\

INSERT INTO menu VALUES ('1','Inicio','/inicio.do','administrador','menuU');\\
INSERT INTO menu VALUES ('2','Administrar Usuarios','/buscarU.do?accion=consultaUsuario','administrador','menuU');\\
INSERT INTO menu VALUES ('3','Alta de Usuarios','/crearU.do','administrador','menuU');\\\\\\


INSERT INTO menu VALUES ('1','Inicio','/inicio.do','supervisor','menu');\\
INSERT INTO menu VALUES ('2','Busquedas','/busquedas.do','supervisor','menu');\\
INSERT INTO menu VALUES ('3','Mi Cuenta','/autoModificarU.do','supervisor','menu');\\
INSERT INTO menu VALUES ('4','Acerca','/acerca.do','supervisor','menu');\\
INSERT INTO menu VALUES ('5','Contacto','/contacto.do','supervisor','menu');\\\\\\

\end{table}

\begin{table}
INSERT INTO menu VALUES ('1','Inicio','/inicio.do','usuario','menu');\\
INSERT INTO menu VALUES ('2','Curriculum','/curriculum.do','usuario','menu');\\
INSERT INTO menu VALUES ('3','Mi Cuenta','/autoModificarU.do','usuario','menu');\\
INSERT INTO menu VALUES ('4','Acerca','/acerca.do','usuario','menu');\\
INSERT INTO menu VALUES ('5','Contacto','/contacto.do','usuario','menu');\\\\

INSERT INTO menu VALUES ('1','Inicio','/inicio.do','usuario','menuC');\\
INSERT INTO menu VALUES ('2','Formulario','/formulario.do','usuario','menuC');\\
INSERT INTO menu VALUES ('3','Personalizar','/curriculumA.do?accion=populateTablas','usuario','menuC');\\
INSERT INTO menu VALUES ('4','Plantillas','/plantillas.do','usuario','menuC');\\
INSERT INTO menu VALUES ('5','Generar','/curriculumA.do?accion=genera','usuario','menuC');\\
\label{HTML}
\caption{Esquema F\'isico de Base de Datos}
\end{table}